{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这个例子让我了解一个在实际任务中如何利用数组操作。首先一个最简单的随机漫步：从0开始，步幅为1和-1，以相同的概率出现。\n",
    "\n",
    "下面是纯python的实现方法，1000步："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import random\n",
    "position = 0\n",
    "walk = [position]\n",
    "steps = 1000\n",
    "for i in range(steps):\n",
    "    step = 1 if random.randint(0, 1) else -1\n",
    "    position += step\n",
    "    walk.append(position)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[0, -1, -2, -3, -2]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "walk[:5]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1062588d0>]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x104ba5cc0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(walk[:100])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "随机漫步其实就是一个简单的累加。而用np.random能更快："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "nsteps = 1000\n",
    "draws = np.random.randint(0, 2, size=nsteps)\n",
    "steps = np.where(draws > 0, 1, -1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "walk = steps.cumsum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们能直接从中得到一些统计数据，比如最大值和最小值："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-57"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "walk.min()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "7"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "walk.max()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "一个更复杂的统计值是在哪一步random walk到达了一个指定值。我们想知道从0走出10步用了多久，不论是正方形还是负方向。`np.abs(walk) >= 10`给我们一个布尔数组告诉我们是否超过10，但我们想要第一次出现的10或-10。因此，我们利用argmax来计算，这个会返回布尔数组中最大值的索引(Ture是最大值)："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "71"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(np.abs(walk) >= 10).argmax()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "注意，使用argmax并不总是效率的，因为它总会搜索整个数组。在这里例子里，一旦True被找到了，我们就返回为最大值。\n",
    "\n",
    "# Simulating Many Random Walks at Once（一次模拟多个随机漫步）\n",
    "\n",
    "假设我们一次要模拟5000个随机漫步。传入一个2-tuple，np.random会生成一个二维数组，然后我们沿着每行来计算累加，这样就能一次模拟5000个："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "nwalks = 5000\n",
    "nsteps = 1000\n",
    "draws = np.random.randint(0, 2, size=(nwalks, nsteps)) # 0 or 1\n",
    "steps = np.where(draws > 0, 1, -1)\n",
    "walks = steps.cumsum(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ -1,  -2,  -3, ..., -24, -25, -26],\n",
       "       [ -1,  -2,  -1, ..., -10,  -9,  -8],\n",
       "       [  1,   0,   1, ...,  -4,  -3,  -4],\n",
       "       ..., \n",
       "       [  1,   0,   1, ...,  52,  51,  52],\n",
       "       [ -1,   0,   1, ..., -26, -25, -26],\n",
       "       [ -1,   0,  -1, ..., -30, -29, -30]])"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "walks"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "找到所有漫步中的最大值和最小值："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "115"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "walks.max()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-129"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "walks.min()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在这些漫步模拟中，我们想找到30步以上的。用any方法："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ True, False, False, ...,  True,  True,  True], dtype=bool)"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hits30 = (np.abs(walks) >= 30).any(1)\n",
    "hits30"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3423"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hits30.sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上面的step只是像翻硬币一样二选一，我们也可以用一个概率函数来生成："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "steps = np.random.normal(loc=0, scale=0.25, size=(nwalks, nsteps))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [py35]",
   "language": "python",
   "name": "Python [py35]"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
